Can I add more functionality to a class in python? [closed] - python

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 8 years ago.
Improve this question
If one has a partial class definition like this...
class Atom(object):
def _init_(self, id, mass = 0, pos = None, radius = 0):
self.id = id
self.name = name
self.mass = 0
Could one add the self.name part and still have it represent the class?

If you want your class to have the variable, name, you have to pass it in with the other arguments.
class Atom(object):
def _init_(self, id=None, name=None, mass=0, pos=None, radius=0):
self.id = id
self.name = name
...
Then you can access/assign it inside your class. Otherwise if you are just trying to get the name of the class it can be done without the need of assigning it, like so:
a = Atom()
a.__class__.__name__
>>> 'Atom'

Since python classes provide all the standard features of Object Oriented Programming: the class inheritance mechanism allows multiple base classes, a derived class can override any methods of its base class or classes, and a method can call the method of a base class with the same name :
Yes you can add more functionality to a class in python.

Related

Class Inheritance and Creation in Python [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 1 year ago.
Improve this question
When you create 2 classes in Python, does the second class always have to be a subclass or the child class? Is it possible to have two classes that have object as their parameters? Thanks!
class Bird(object):
def __init__(self, name):
self.name = name
print("A %s has feathers" % self.name)
class Seagull(object):
def __init__(self):
print("Seagulls can fly")
super().__init__('Seagull')
seagull = Seagull()
What is wrong with this code? It says that Seagull is an inheritance so its (object) should be Bird... but why?
Whether you have subclasses or independent classes depends on the logic you're implementing.
With a bird and a seagull, you'd probably want a subclass, because a seagull is a kind of bird:
class Bird(object):
...
class Seagull(Bird):
...
In other situations, you would want separate classes, not related to each other:
class Bird(object):
...
class Locomotive(object):
...
By the way, in Python 3 the (object) part is not needed when it's literally object, so we would normally write:
class Bird:
...
class Seagull(Bird):
...
class Locomotive:
...

Translate C# class to python [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 1 year ago.
Improve this question
I got C# class defined as follows. I got one constructor and inner class with properties. How can i translate it to python?
class Person
{
Property string Name {get;set;}
Proeprty InnerClass MyInnerClass {get;set;}
//constructor
Person(string name, InnerClass myinnerClass)
{
Name = name;
MyInnerClass = myinnerClass;
MyInnerClass .car = "Mercedes";
}
class InnerClass
{
Property string Car {get;set;}
}
}
There are some pretty stark differences between Python and C#, but I'll provide an approximation that's about as close as you're going to get. In Python, there is no real concept of 'private' or 'public' variables. everything is just public by default.
There are ways of denoting in python whether a property should be internal or external, but since all of the variables in your example were public anyway, I won't worry about that.
Anyway, here goes nothing:
class Person:
class InnerClass:
def __init__(self, car=None):
self.car = car
def __init__(self, name:str, myinnerClass: InnerClass):
self.Name = name
self.MyInnerClass = myinnerClass
self.MyInnerClass.car = "Mercedes"
Not a C# programmer, but if a property is defined with default get; set;, I don't see a need to make it access-controlled. If you need pseudo-private variables or mutators with side-effects, look into the Python property decorator.
class Person:
# use __slots__ if your class's attributes can be determined at
# "compile"-time
__slots__ = ["name", "inner_obj"]
def __init__(name: str, inner_obj: 'Person.InnerClass') -> None:
self.name = name
self.inner_obj = inner_obj
self.inner_obj.car = "Mercedes"
class InnerClass:
__slots__ = ["car"]

Can you access attributes that were created with the init method from other methods in the class? [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 1 year ago.
Improve this question
When I write the __init__ method and assign attributes, can I access those attributes in other methods (functions) that I write in that class? If so, how is it done?
I've googled this but couldn't find an answer. I Haven't been able to wrap my head around this one.
Use self:
class MyClass:
def __init__(self):
self.name = 'John'
def other_method(self):
print(self.name)
other_method will print "John".
When you make a class and set an instance (like first_class = MyClass()) the def __init__(self): is run or initialised. Any variables in there, like self.name are able to be accessed from within the class and its functions, as well as when you use a class in another program. self kinda attaches that variable to that class.
Basically using Allure's example:
class MyClass:
def __init__(self):
self.name = "John"
def show_name(self):
print(self.name)
Then use MyClass's name outside of class, in a program:
firstClass = MyClass()#Initialise MyClass and its variables
print(firstClass.name)
Or:
firstClass= MyClass()
firstClass.show_name()
Both output:
'John'
(still putting up this answer for others, hope you don't mind :) )

What is difference between these two codes? [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 1 year ago.
Improve this question
Turtle=Animal("Turtle")
Turtle.set_category("reptile")
and
class Turtle(Animal):
category="reptile"
While learning object composition in python i came across a problem in which latter worked but former did not.
this was the class
class Animal:
name = ""
category = ""
def __init__(self, name):
self.name = name
def set_category(self, category):
self.category = category
These two sequences should behave the same:
turtle=Animal("Turtle")
turtle.set_category("reptile")
and
class Turtle(Animal):
category="reptile"
name = "Turtle"
turtle = Turtle()
The two turtle objects will behave identically.
In the first piece of code you are defining an instance of the Animal class stored in the Turtle variable, whereas in the second piece of code you are defining a new class called Turtle that will inherit from the Animal class.
Read more about class objects here: https://docs.python.org/3/tutorial/classes.html#class-objects
Read more about class inheritance here: https://docs.python.org/3/tutorial/classes.html#inheritance

Python vs Ruby class methods [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 6 years ago.
Improve this question
The following two Ruby and Python codes are examples of class methods. Why does python allow accessing class methods through objects but ruby doesn't ?
Python code
class student:
b = 78
#classmethod
def foo(var):
return var.b
z = student()
print z.foo() # => 78
Ruby Code
class Student
##b = 78
def self.foo
##b
end
end
z = Student.new
puts z.foo # => -e:20:in `<main>': undefined method `foo' for #<Student:0x007ff4f98ab9e8> (NoMethodError)
An answer for the ruby side of your question: Ruby does allow accessing class methods through objects via a reader for the class:
class Student
##b = 78
def self.foo
##b
end
end
z = Student.new
puts z.class.foo
z.class returns the class of the object (in this case it is Student).
class Student
end
z = Student.new
puts z.class #Student
puts z.class.class #Class
From Ruby doc Object#display:
display(port=$>)
Prints obj on the given port (default $>). Equivalent to:
def display(port=$>)
port.write self
end
So it just displays the receiver, which is a Student instance. I don't see how this is relevant to class methods.
Calling the class method Student.display is in fact possible:
z.class.display
Ruby doesn't have class methods, only instance methods. In your case, foo is in instance method of the singleton class of Student.
Once you understand that there is no such thing as a class method in Ruby, only instance methods, it should be immediately obvious why calling an instance on a completely different instance cannot possibly work.

Categories