कक्षाओं में नया...

मेरे पास यह वर्ग नीचे निर्दिष्ट है, और मैं इसे कॉल करने का प्रयास कर रहा हूं। मूल रूप से जो कार्य करता है वह एक सूची लेता है, सूची से कुछ संख्याओं को हटा देता है और सूची की लंबाई देता है। तो अगर मेरे पास है:

nums = [5,6,6,7,8], val = 6

इसे 3 की लंबाई लौटानी चाहिए (सूची में शेष 3 नंबर)

यहां मेरा कोड है, लेकिन जब मैं इसे निष्पादित करता हूं तो मुझे 'समाधान' ऑब्जेक्ट मिलता है जो कॉल करने योग्य नहीं होता है:

class Solution:
    def removeElement(self, nums, val):
        lens = len(nums)
        if lens == 0:
            return 0
        x = 0
        for i in range(lens):
            if nums[i] != val:
                nums[x] = nums[i]
            x += 1
        return x


a_solution = Solution()
a_solution([5,6,6,7,8], 6)
0
JD2775 28 मार्च 2018, 19:56

2 जवाब

सबसे बढ़िया उत्तर

यहां बताया गया है कि आप जो चाहते हैं उसे करने के लिए आप अपनी कक्षा को फिर से कैसे लिखेंगे

class Solution:
    def removeElement(self, nums, val):
        lens = len(nums)
        if lens == 0:
            return 0
        x = 0
        for i in range(lens):
            if nums[i] != val:
                nums[x] = nums[i]
                x += 1
        return x

# This line creates an instance of the Solution class
a_solution = Solution()
# This line calls the method removeElement
a_solution.removeElement([5,6,6,7,8], 6)

यहां एक और संस्करण है जो to_add . नामक कुछ आवृत्ति चर सेट करके कक्षा का उपयोग करने का लाभ उठाता है

class CustomSolution:

    # This method (function) gets run whenever you create an instance
    # of this class
    def __init__(self, to_add):
        # The self keyword means that each instance of the class
        # (rather than the class itself) can have it's own
        # 'to_add' variable
        self.to_add = to_add

    def removeElement(self, nums, val):
        lens = len(nums)
        if lens == 0:
            return 0
        x = 0
        for i in range(lens):
            if nums[i] != val:
                nums[x] = nums[i]
                x += 1
        return x + self.to_add


# Now we create an instance where the amount to add is 20
a_20_solution = Solution(to_add=20)
# This line calls the method removeElement but the result is now different!
a_20_solution.removeElement(nums=[5, 6, 6, 7, 8], val=6)  
1
Jinglesting 28 मार्च 2018, 17:13

इसके दो समाधान हैं, और मेरा मानना ​​​​है कि पहला वह है जिसे आप ढूंढ रहे हैं ...

समाधान 1.

कक्षा के भीतर फ़ंक्शन को कॉल करें, जिसके लिए वाक्यविन्यास है:

a_solution.removeElement(...)

समाधान 2.

उस वर्ग के उदाहरण को कॉल करने योग्य बनाने के लिए अपनी कक्षा में __call__ लागू करें:

class Solution:
    def __call__(self, nums, val):
        lens = len(nums)
        if lens == 0:
            return 0
        x = 0
        for i in range(lens):
            if nums[i] != val:
                nums[x] = nums[i]
            x += 1
        return x
1
Austin A 28 मार्च 2018, 17:07